# 说明：一种随机生成的信息（数字、字母、汉字、图片、算术题）等为了防止恶意的请求行为，增加应用的
# 安全性。

# 验证码的处理方式
# 说明：Selenium中并没有对验证码处理的方法，在这里我们介绍一下针对验证码的几种常用处理方式
# 方式：
# 1). 去掉验证码
# (测试环境下-采用)
# 2). 设置万能验证码
# (生产环境和测试环境下-采用)
# 3). 验证码识别技术
# (通过Python-tesseract来识别图片类型验证码；识别率很难达到100%)
# 4). 记录cookie
# (通过记录cookie进行跳过登录)

# 提示
# 1. 去掉验证码、设置万能验证码：都是开发来完成，我们在这里不做讲解
# 2. 验证码识别技术：成功率不高，验证码种类繁多，不太适合
# 3. 记录cookie：比较实用，我们对它进行下讲解

# cookie
# 1. Cookie是由Web服务器生成的，并且保存在用户浏览器上的小文本文件，它可以包含用户相关的信息。
# 2. Cookie数据格式：键值对组成（python中的字典）
# 3. Cookie产生：客户端请求服务器，如果服务器需要记录该用户状态，就向客户端浏览器颁发一个Cookie
# 数据
# 4. Cookie使用：当浏览器再次请求该网站时，浏览器把请求的数据和Cookie数据一同提交给服务器，服务
# 器检
# 查该Cookie，以此来辨认用户状态。

# cookie的应用场景
# 1. 实现会话跟踪，记录用户登录状态
# 2. 实现记住密码和自动登录的功能
# 3. 用户未登录的状态下，记录购物车中的商品


# Selenium操作cookie
# 说明：Selenium中对cookie操作提供相应的方法
# 方法：
# 1. get_cookie(name) --> 获取指定cookie
# name:为cookie的名称
# 2. get_cookies() --> 获取本网站所有本地cookies
# 3. add_cookie(cookie_dict) --> 添加cookie
# cookie_dict：一个字典对象，必选的键包括："name" and "value"
# 导包
import time
from selenium import webdriver
from selenium.webdriver import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options

# 打开浏览器
service = Service(r"D://Python314//chromedriver.exe")
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)
driver = webdriver.Chrome(service=service, options=chrome_options)   # 创建浏览器对象

driver.get("https://baidu.com")
driver.maximize_window()

driver.add_cookie({"name":"BDUSS","value":"pIVkNFUXJUQVZwa0gzUks1bWh6WFFpZ3I5R1Y3MDN6TTJJU0xjQUx0RXA3U3RwRUFBQUFBJCQAAAAAAQAAAAEAAAAdk0U0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAClgBGkpYARpR2"})
time.sleep(3)

cookie = driver.get_cookies()
print("cookies:", cookie)
for co in cookie:
    print(co['name'])

#调用刷新方法
driver.refresh()
time.sleep(3)

driver.quit()